www.gusucode.com > Delphi 列举进程及进程模块信息实例 > Delphi 监测磁盘容量及设置光驱自动运行\00301.txt

    1:如何启动/关闭CD-ROM的自动运行
在Private声明部分说明一个SetCDAutoRun(AAutoRun:Boolean)用来设置是否让光盘自动运行,AAutoRun=True;自动运行;AAutoRun=False;不能自动运行。

SetCDAutoRun(AAutoRun:Boolean)的过程如下:
Procedure TForm1.SetCDAutoRun(AAutoRun:Boolean);
const
  DoAutoRun : array[Boolean] of Integer = (0,1);
var
  Reg:TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.KeyExists('System\CurrentControlSet\Services\Class\CDROM') then
      if Reg.OpenKey('System\CurrentControlSet\Services\Class\CDROM',FALSE) then
        Reg.WriteBinaryData('AutoRun',DoAutoRun[AAutoRun],1);
  finally
    Reg.Free;
  end;
  MessageBox(handle,'你的设置在Windows重新启动后将生效','信息',MB_IconInformation+MB_OK);
End ;

2:如何判断光驱中是否有光盘
function DiskInDrive(Drive: Char): Boolean;
var
  ErrorMode: word;
begin
  if Drive in ['a'..'z'] then Dec(Drive, $20); //make it upper case
  if not (Drive in ['A'..'Z']) then //make sure it's a letter
  raise
    EConvertError.Create('Not a valid drive ID'); //turn off critical errors
    ErrorMode :=SetErrorMode(SEM_FailCriticalErrors);
  try

  if DiskSize(Ord(Drive) - $40)=-1 then //drive 1=a, 2=b, 3=c, etc.
                                         Result :=False
                                    else Result :=True;
  finally
  SetErrorMode(ErrorMode); //restore old error mode
  End ;
end;
如果函数返回值为真,说明有盘,否则说明没有。

3:如何打开和关闭计算机的光驱
要打开和关闭计算机的光驱,只要向MCI发送一条mciSendString指令即可,别忘了,在Uses里面加上mmsystem。程序代码如下:

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  mciSendString('Set cdaudio door open wait', nil, 0, handle);  //打开光驱
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  mciSendString('Set cdaudio door closed wait', nil, 0, handle); //关闭光驱
end;

4:获得磁盘的类型
Function GetDiskType(Disk : Char) : String ;
var
    x:integer;
    driver:pchar;
    TempStr : String ;
begin
    driver:=Pchar(Disk+':\'); //要显示的驱动器名
    x := GetDriveType(driver);
    Case x of
        2: Result := '该驱动器是可移动驱动器';
        3: Result := '该驱动器是固定驱动器';
        4: Result := '该驱动器是网络驱动器';
        5: Result := '该驱动器是CD-ROM驱动器';
        6: Result := '该驱动器是虚拟驱动器';
        Else Result := '该驱动器无效';
    End;
end;

5:获得磁盘的容量
Function GetDiskLarge(Disk : Char) : String;
var
    driver:pchar;
    sec1, byt1, cl1, cl2:longword;
begin
    driver:=PChar(Disk+':\');  //要显示的驱动器名
    GetDiskFreeSpace(driver, sec1, byt1, cl1, cl2);
    cl1 := cl1 * sec1 * byt1;
    cl2 := cl2 * sec1 * byt1;
    Result := '该驱动器总共容量' + Formatfloat('###,##0',cl2) + '字节' +#13+#13+
              '该驱动器可用容量' + Formatfloat('###,##0',cl1) + '字节' ;
end;